// 7.3. 存储类-static存储类
/**
 * 存储类定义 C++ 程序中变量/函数的范围（可见性）和生命周期。这些说明符放置在它们所修饰的类型之前。下面列出 C++ 程序中可用的存储类：
auto
register
static
extern
mutable
thread_local (C++11)

从 C++ 17 开始，auto 关键字不再是 C++ 存储类说明符，且 register 关键字被弃用。


翻译
register 登记簿;登记表;注册簿;声区;音区;(适合特定场合使用的)语体风格，语域
static 静止的;静态的;停滞的;静力的
extern 不住机构内的公共机构工作人员;(尤指)非住院医生，非住院的医院员工
mutable 可变的;会变的;易变的
thread_local 本地线程


static 存储类
static 存储类指示编译器在程序的生命周期内保持局部变量的存在，而不需要在每次它进入和离开作用域时进行创建和销毁。因此，使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。

static 修饰符也可以应用于全局变量。当 static 修饰全局变量时，会使变量的作用域限制在声明它的文件内。

在 C++ 中，当 static 用在类数据成员上时，会导致仅有一个该成员的副本被类的所有对象共享。
 * 
*/

#include <iostream>

static int count = 10;// 全局静态变量 

void damage(void);

int main(void)
{
  int i = 0;
  while (i < 3)
  {
    damage();
    i++;
  }

  printf("-------------end----------\n");
  return 0;
}

void damage(void)
{
  static int hp = 100;// 局部静态变量
  hp -= 2;
  std::cout << "damage\t" << '\n'
            << "hp:\t" << hp << '\n';
}